//
//  @ Project : tp1-algo3
//  @ File Name : componente.java
//  @ Date : 04/05/2008
//  @ Author : Claudia, Jorge, Luciana, Luciano
//
package modelo.auto;


public class Componente extends ElementoTaller {

	private static final long serialVersionUID = 1L;
	// Constantes
	public static final double DEFAULT_OFFSET_DESGASTE =  0.01; 	// Valor a desgastar por default.
	public static final double DEFAULT_VIDA_UTIL = 100.0; 	// Valor a desgastar por default.
	public static final double DEFAULT_PESO = 150;

	
	// Propiedades
	private double factorVelocidad;
	private double factorAceleracion;
	private double offsetDesgaste;
	private double vidaUtil;
	
	
	// Metodos
	
	/*Constructor 1/2*/
	public Componente() {
		super();
		
		this.setDescripcion("");
		this.setTipo("");
		this.setPrecio(0);
		this.setPeso(DEFAULT_PESO);
		offsetDesgaste = DEFAULT_OFFSET_DESGASTE;
		factorAceleracion = .99;
		factorVelocidad = .99;
		vidaUtil = DEFAULT_VIDA_UTIL;
	}
	
	/*Constructor 2/2*/
	public Componente(String descripcion, String tipo, double costo, double peso, double factVel, double factAce, double vidaUtil) {
		super();
		
		this.setDescripcion(descripcion);
		this.setTipo(tipo.toUpperCase());
		this.setPrecio(costo);
		this.setPeso(peso);
		offsetDesgaste = DEFAULT_OFFSET_DESGASTE;
		factorAceleracion = factAce;
		factorVelocidad = factVel;
		this.vidaUtil = vidaUtil;
	}
	
	
	/**
	 * Obtiene un valor real para ser multiplicado por la velocidad de un auto.
	 * @return
	 */
	public double getFactorVelocidad(){
		// Retorna el factorVelocidad si aun no se gasto, en caso contrario, devuelve 0;
		return (vidaUtil > 0)? this.factorVelocidad : 0;
	}
	
	
	// Utilizado solo por Neumatico.
	protected void setFactorVelocidad(double factor){
		this.factorVelocidad = factor;
	}
	
	
	/**
	 * Obtiene un valor real para ser multiplicado por la aceleracion de un auto.
	 * @return
	 */
	public double getFactorAceleracion(){
		// Retorna el factorAceleracion si aun no se gasto, en caso contrario, devuelve 0;
		return (vidaUtil > 0)? this.factorAceleracion : 0;
	}
	
	
	// Utilizado solo por Neumatico.
	protected void setFactorAceleracion(double factor){
		this.factorAceleracion = factor;
	}
	
	
	/**
	 * Devuelve la vida util actual del componente.
	 * @return Valor actual de la vida util del componente.
	 */
	public double getVidaUtil(){
		return this.vidaUtil;
	}
	
	public void setVidaUtil(double vidaUtil){
		this.vidaUtil = vidaUtil;
	}
	
	/**
	 * Decrementa la vida util del componente.
	 */
	public void gastar() {
		this.vidaUtil -= offsetDesgaste;
	}
}
